package com.example.common.utils

import android.content.Context
import android.widget.ImageView
import androidx.annotation.DrawableRes
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions

object ImageLoader {
    // 单例对象声明：全局唯一的图片加载工具
    // 核心加载方法（支持自定义配置）
    fun load(
        context: Context,
        source: Any?,
        imageView: ImageView,
        options: RequestOptions = defaultOptions()
    ) {
        Glide.with(context)// 1. 绑定上下文
            .load(source)// 2. 加载资源（URL/路径/资源ID）
            .apply(options)
            .into(imageView)// 4. 显示到目标控件
    }


    // 带占位图的快捷方法
    fun loadWithPlaceholder(
        context: Context,
        source: Any?,
        imageView: ImageView,
        @DrawableRes placeholderRes: Int//可绘制资源注解（确保参数是图片资源ID）
    ) {
        load(context, source, imageView, defaultOptions().apply {
            placeholder(placeholderRes)
            error(placeholderRes)
        })
    }

    // 圆形图片快捷方法
    fun loadCircle(
        context: Context,
        source: Any?,
        imageView: ImageView
    ) {
        load(context, source, imageView, defaultOptions().circleCrop())
    }

    // 圆角图片快捷方法
    fun loadRoundedCorners(
        context: Context,
        source: Any?,
        imageView: ImageView,
        radiusDp: Int = 10
    ) {
        val radiusPx = dpToPx(context, radiusDp)
        load(context, source, imageView, defaultOptions().transform(RoundedCorners(radiusPx)))
    }
    // ==================== 内部工具方法 ====================
    private fun defaultOptions(): RequestOptions {
        return RequestOptions()
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .dontTransform() // 防止重复转换
    }
    // 扩展函数：dp转px
    private fun dpToPx(context: Context, dp: Int): Int {
        return (dp * context.resources.displayMetrics.density).toInt()
    }
}